package service

import "fmt"

func AddStr() {
	var a = "1"             //定义一个变量  a
	var b = "2"             //定义一个变量 b
	var c = a + b           //定义一个变量 c
	fmt.Println("打印结果:", c) //打印变量 c
	//修改 a  和  b 的值  会影响c的结果

	//加一行代码
	//haiwen  code
}

//2022-03-15 需求
//1.定义 带参数，并且带返回值 的函数
func AddInt(a int, b int) int {
	c := a + b
	return c
}

//1.定义 带参数，并且带返回值 的函数
func AddString(a string, b string) string {
	c := a + b
	return c
}
func Add() {
	var a int = 1           //定义一个int(整数)类型的变量 a
	var b int = 2           //定义一个int(整数)类型的变量 b
	var c int               //定义一个int类型的，变量 c
	c = AddInt(a, b)        //这里把 a,b 当做参数 传给函数 AddInt，用c来接受函数的返回值
	fmt.Println("打印结果:", c) //打印变量 c
	//修改 a  和  b 的值  会影响c的结果

	//小知识, :=  相当于 省略了 var
	a1 := "1"
	b1 := "2"
	c1 := AddString(a1, b1)
	fmt.Println("打印结果:", c1)
	//修改 a1  和  b1 的值  会影响c的结果
}

//循环打印1-100
func ForPrint() {
	for i := 0; i < 100; i++ {
		fmt.Print(i)
	}
	fmt.Println("") //换行
}

//条件判断
func IfPrint() {
	for i := 0; i < 10; i++ {
		if i%2 == 0 {
			fmt.Println(i, "这是一个偶数")
		} else {
			fmt.Println(i, "这是一个奇数")
		}
	}
}

// 写一个函数  判断一个整数  是否是偶数
// 如果是偶数，返回 1，否则 返回 0
func IsEven(i int) int {
	if i%2 == 0 {
		return 1
	} else {
		return 0
	}
}

//20220319 需求
//1.写一个函数，用于判断一个整数 是否是偶数。如果是偶数，返回1,如果不是,返回0
func JudgeEven(a int) int {
	if a%2 == 0 {
		return 1
	}
	return 0
}

//2.数组 及 集合的用法
// 相关练习
// 找出某个数的位置
// 找出最大，最小
// 交换位置
// 找出第 n 大的数
// 冒泡排序
// 插入，删除
// 找出重复的数
func ListPrint() {
	var a []int
	a = make([]int, 5)
	a[0] = 1
	a[1] = 2
	a[2] = 3
	a[3] = 4
	a[4] = 5
	fmt.Println(a)
	//循环打印
	for i := 0; i < 5; i++ {
		fmt.Println("这是数组的第", i, "个，值是", a[i])
	}
}

func MapPrint() {
	var a map[string]string
	a = make(map[string]string)
	a["name"] = "hywen"
	a["num"] = "007"
	a["age"] = "23"
	fmt.Println("名字:", a["name"])
	fmt.Println("学号:", a["num"])
	fmt.Println("年龄:", a["age"])
}

//有趣的递归,计算  n!  就是n的阶乘
func Fn(n int) int {
	if n == 1 {
		return 1
	}
	return n * Fn(n-1)
}

// 举例说明 当n=4
// return 4*Fn(3)  那么Fn(3)等于多少?
// return 4*3*Fn(2) Fn(3)=3*Fn(2) Fn(2)呢？
// return 4*3*2*Fn(1) Fn(2) = 2*Fn(1)  Fn(1)呢？Fn(1)==1
// 因为n==1 的话  return 1,那么 Fn(1)=1

func Exchange(a []int) []int {
	//如果要交换两个函数的值，需要借助一个临时变量
	max := a[0]
	x := 0
	for i := 0; i < len(a); i++ {
		if max < a[i] {
			max = a[i] //记录最大值
			x = i      //记录最大值的位置
		}
	}
	tmp := a[0]
	a[0] = a[x]
	a[x] = tmp
	return a
}
